package cn.itcast.nems.studentrecord.dao.dataobject;

import cn.itcast.nems.employee.dao.bean.EmployeeGroupBean;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * <p>
 * 退费凭单-头
 * </p>
 *
 * @author 刘曙
 * @since 2024-02-29
 */
@EqualsAndHashCode(callSuper = true)
@Data
public class JournalRefundDO extends ApprovalFormQueryModel implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 退费单号，生成规则：TF+YYMMDD+ZEROFILL(MURMURHASH(UUID()),0,10) 示例：TF2308281693193454
     */
    private String id;

    /**
     * 新学籍ID
     */
    private String studentRecordId;

    /**
     * 退费的班级ID
     */
    private Integer clazzId;

    /**
     * 退费的班级名称
     */
    private String clazzName;

    /**
     * 业务日期。注：可能存在业务实际发生日期与录单日期不一致的情况，此日期应为业务实际发生日期。
     */
    private LocalDateTime bizDate;

    /**
     * 费用类型：培训收入、押金、电脑使用费、吸烟罚款、学生住宿费等。注：数据来自来自于数据字典
     */
    private String costTypeId;

    /**
     * 费用类型，来自于数据字典
     */
    private String costTypeName;

    /**
     * 退费类型：退报名费、退学费、退多交学费、退电脑使用费等。注：来自于数据字典
     */
    private String refundTypeId;

    /**
     * 退费类型，来自于数据字典
     */
    private String refundTypeName;
    /**
     * 退费原因CODE;来自字典表
     */
    private String reasonCode;

    /**
     * 退费原因描述
     */
    private String reasonDescription;

    /**
     * 是否贷款退费
     */
    private Boolean loanFlag;

    /**
     * 贷款公司 来自数据字典？
     */
    private String loanCompany;

    /**
     * 是否特殊退费：0否、1是
     */
    private Boolean specialFlag;

    /**
     * 退款金额。单位：分
     */
    private Integer amount;

    /**
     * 备注;发起人填写的备注
     */
    private String remark;

    /**
     * 是否已开发票：0否、1是
     */
    private Boolean invoiceFlag;

    /**
     * 发票号
     */
    private String invoiceNo;

    /**
     * 状态;枚举值：草稿｜DRAFT、待审批｜PENDING、审批中｜APPROVING、审批未通过｜REJECTED、已完成｜FINISHED
     */
    private String state;

    /**
     * 关联的退学凭单ID;如果退费来自于退学退费的申请，退学凭单ID不应该为空！
     */
    private String journalDropoutId;

    /**
     * category：1：审批）2：知会）
     */
    private Integer category;

    private LocalDate createdStartTime;
    private LocalDate createdEndTime;

    private String scopeOrCreatedBy; // 我创建的
    private List<String> scopeOrIdIn; // 需要我审批的 ： 我审批过的 + 知会我的
    private String scopeOrIdInCreatedBy;

    /**
     * 审批单ID
     */
    private String formId ;
    private List<EmployeeGroupBean> employeeGroups;
    /**
     * 创建人邮箱
     */
    private String createdBy;
    private LocalDateTime createdDatetime;

    private Integer studentId;
    /**
     * 学员姓名
     */
    private String studentName;
    private String studentNo;


    /**
     * 退费金额-下限 (单位：分)
     */
    private Integer minAmount ;
    /**
     * 退费金额上限  (单位：分)
     */
    private Integer maxAmount ;

    /**
     * 单据来源， DROPOUT_REFUND|退费退费、REFUND|退学凭单
     */
    private String receiptSource ;
    /**
     * 业务线ID;来自于订单上的业务线
     */
    private Integer businessLineId;

    /**
     * 业务线名称;来自于订单上的业务线
     */
    private String businessLineName;

    /**
     * 退费渠道CODE
     */
    private String paymentAccountCode;

    /**
     * 退费渠道名称
     */
    private String paymentAccountName;
    /**
     * 付款操作人姓名（邮箱）
     */
    private String refundOperatorName ;

    /**
     * 付款时间
     */
    private LocalDateTime refundDate ;
}
